package com.model;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;

@Entity
@NamedQueries({
	@NamedQuery(name = "Funcionario.findAll", query = "select f from Funcionario f"),
		@NamedQuery(name = "Funcionario.acharFuncionarioPeloIdComRegistros", query = "select f from Funcionario f where f.id = :funcionarioId"),
		@NamedQuery(name = "Funcionario.acharFuncionarioPelaIdentificacao", query = "select f from Funcionario f where f.identificacao = :funcionarioIdentificacao") })
public class Funcionario implements Serializable {

	private static final long serialVersionUID = 1L;
	public static final String GET_ALL = "Funcionario.findAll";	
	public static final String ACHAR_FUNCIONARIO_PELO_ID_COM_REGISTROS = "Funcionario.acharFuncionarioPeloIdComRegistros";
	public static final String ACHAR_FUNCIONARIO_PELA_IDENTIFICACAO = "Funcionario.acharFuncionarioPelaIdentificacao";

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int id;

	@Column(unique = true)
	private String nome;
	private String identificacao;
	
	@Enumerated(EnumType.STRING)
	private Acesso acesso;

	@OneToMany
	@JoinTable(name = "registros_funcionario", joinColumns = { @JoinColumn(name = "funcionarioId", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "registroId", referencedColumnName = "id") })
	private List<Registro> registros;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getIdentificacao() {
		return identificacao;
	}

	public void setIdentificacao(String identificacao) {
		this.identificacao = identificacao;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public List<Registro> getRegistros() {
		return registros;
	}

	public void setRegistros(List<Registro> registros) {
		this.registros = registros;
	}

	public Acesso getAcesso() {
		return acesso;
	}

	public void setAcesso(Acesso acesso) {
		this.acesso = acesso;
	}

	@Override
	public int hashCode() {
		return id;
	}

	@Override
	public boolean equals(Object obj) {
		if (obj instanceof Funcionario) {
			Funcionario func = (Funcionario) obj;
			return func.getId() == id;
		}
		return false;
	}
}